<?php

namespace app\common\middleware;

use app\common\util\Result;
use think\response\Json;

/**
 * 自动封装Result 中间件
 */
class AutoResult
{
    public function handle($request, \Closure $next)
    {
        /** @var \think\Response */
        $response = $next($request);

        // 已经是json数据了，不做处理
        if ($response instanceof Json) {
            return $response;
        }

        $data = $response->getData();
        // 过滤string和空值，如果需要data: string, 需要使用Result::success()
        if (is_string($data) || is_null($data)) {
            return $response;
        }
        // 如果已经是Result，转成数组
        if ($data instanceof Result) {
            return json($data->toArray());
        }

        return Result::rest($data);
    }
}